#include "mainwindow.h"

#include <QApplication>
#include <QString>
#include <QFile>

QString loadQss() {
    QFile file(":/style.qss");

    file.open(QFile::ReadOnly);

    QString style = file.readAll();

    file.close();

    return style;
}


//如果通过 QSS 设置的样式和通过 C++ 代码设置的样式冲突, 则 QSS 优先级更高.
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    还可以通过 QApplication 的 setStyleSheet 方法设置整个程序的全局样式.
//	全局样式优点:
//	• 使同一个样式针对多个控件生效, 代码更简洁.
//	• 所有控件样式内聚在一起, 便于维护和问题排查.
    a.setStyleSheet("QPushButton {color: red; }");

//  上述代码都是把样式通过硬编码的方式设置的. 这样使 QSS 代码和 C++ 代码耦合在一起了, 并不方便代码的维护.
//	因此更好的做法是把样式放到单独的文件中, 然后通过读取文件的方式来加载样式.

    //const QString& style = loadQss();

    //a.setStyleSheet(style);

    //由于设置样式太灵活,有很多地方都能设置.就导致当某个控件样式不符合预期的时候，排查起来就比较麻烦了
    //实际开发中，如果需要设置样式，建议最好统一使用某一种方式来设置
    //1.全局样式(QApplication设置的）
    //2.指定控件的样式(这个控件是否设置了样式）
    //3.指定控件的父控件的样式（可能是从父控件继承过来的）
    //4.qss文件中的样式
    //5.ui文件中的样式

    //注意, 此处选择器使用的是 QWidget . QPushButton 也是 QWidget 的子类, 所以会受到QWidget 选择器的影响
    //这个是类型选择器,选择所有的 QWidget 和 其子类 的控件.
    //a.setStyleSheet("QWidget {color: red; }");


    //此时按钮的颜色不会发生改变. 此时只是选择 QWidget 类, 而不会选择 QWidget 的子类 QPushButton 了
    //这个是类选择器,选择所有的 QWidget 的控件. 不会选择子类.
    //a.setStyleSheet(".QWidget {color: red; }");

    MainWindow w;
    //w.qssSelectorTest(a);
    //w.qssBoxModelTest(a);
    //w.buttonQssTest(a);
    w.checkBoxQssTest(a);

    w.show();
    return a.exec();
}
